package com.hongji.lms5xxcommunicator.common;

/** 轻量解析 LMDscandata 头部字段，提取设备时间戳(µs)。 */
public final class LmdHeader {
    private LmdHeader() {}

    /** 从整帧ASCII按空白切分，取指定索引的十六进制字段，解析为无符号µs（long）。失败返回 -1。 */
    public static long extractDeviceTimeUs(String ascii,
                                           int timeSinceStartupIdx,
                                           int timeOfTransmissionIdx) {
        if (ascii == null || ascii.isEmpty()) return -1L;
        // 粗切分（LMS帧长度可观，但只取前若干个字段就行）
        // 为稳妥，这里不做长度截断，依赖JVM分配；如需极致省分配，可优化为手动游标解析。
        String[] tok = ascii.split("\\s+");
        // 优先：Time of transmission
        long v = parseHex(tok, timeOfTransmissionIdx);
        if (v >= 0) return v;
        // 其次：Time since startup
        v = parseHex(tok, timeSinceStartupIdx);
        return v >= 0 ? v : -1L;
    }

    private static long parseHex(String[] tok, int idx) {
        if (idx < 0 || tok == null || idx >= tok.length) return -1L;
        String s = tok[idx];
        long val = 0L;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            int d = (c>='0'&&c<='9')?c-'0':(c>='A'&&c<='F')?c-'A'+10:(c>='a'&&c<='f')?c-'a'+10:-1;
            if (d < 0) return -1L;
            val = (val << 4) | d;
        }
        return val;
    }
}
